#ifndef POINT_H
#define POINT_H

#include <QtOpenGL>
//#include <boost/serialization/serialization.hpp>

/*
 *  @autheur : LEMOUEL Florian
 *  @date : 25.03.2013
 *  @version 1.0 : création de la classe complète
 */


/*
 * Classe représentant un point en 3D
 *
 */
class Point
{

    //--------------------- Constructeurs et destructeur -------------------
public:

    //Constructeur par défault
    Point();

    //Constructeur à 3 paramètres
    Point(GLfloat x, GLfloat y, GLfloat z);

    //Constructeur à partir d'un point
    Point(const Point& p);

    //Destructeur du point
    ~Point();
    //----------------------------------------------------------------------
    //--------------------- Méthodes ---------------------------------------
public:
    //On renvoie une copie du point courant
    Point* cloner();
    //----------------------------------------------------------------------

    //--------------------- Accesseurs -------------------------------------
public:

    //On renvoie la coordonnée en x
    GLfloat getX();

    //On renvoie la coordonnée en y
    GLfloat getY();

    //On renvoie la coordonnée en z
    GLfloat getZ();

    //On affecte x
    void setX(GLfloat x);

    //On affecte y
    void setY(GLfloat y);

    //On affecte z
    void setZ(GLfloat z);

    //----------------------------------------------------------------------
    //--------------------- Surcharge des opérateurs -----------------------
public:

    //On surcharge l'opérateur +=
    void operator+=(const Point& p);

    //----------------------------------------------------------------------
    //--------------------- Attributs --------------------------------------
protected:

    //Coordonnées du point
    GLfloat _x;
    GLfloat _y;
    GLfloat _z;
    //----------------------------------------------------------------------
};

/*
namespace boost
{
    namespace serialization {

        template<class Archive>
        void save(Archive & ar, Point & p, const unsigned int version) const
        {
            ar  & n.getX();
            ar  & n.getY();
            ar  & n.getZ();
        }

        template<class Archive>
        void load(Archive & ar, Point & p, const unsigned int version)
        {
            GLfloat x, y, z;
            ar >> x;
            ar >> y;
            ar >> z;

            p.setX(x);
            p.setY(y);
            p.setZ(z);
        }


    } // namespace serialization
} // namespace boost
BOOST_SERIALIZATION_SPLIT_MEMBER(Point)
*/

#endif // POINT_H
